//导入数据库模块db
const db = require("../db/mysql")

//定义查询sql语句
const sqlStr = "SELECT * FROM en_users WHERE username = ?"

//导入bcryptjs
const bcrypt = require("bcryptjs")

//导入jsonwebtoken
const jwt = require("jsonwebtoken")
const {jwtSecretKey, expiresIn} = require("../config");


//导出并定义用户注册函数
exports.regUser = (req, res) => {

    //获取客服端向服务端发送的表单数据
    let userInfo = req.body;
    //校验用户信息
    /* if (!userInfo.username || !userInfo.password) {
         return res.cc('用户名或密码不合法')
     }*/

    //查询用户是否已经存在
    db.query(sqlStr, userInfo.username, (err, results) => {
        if (err) {
            return res.cc(err)
        }

        if (results.length > 0) {
            return res.cc("该用户名已经存在，请重新输入")
        }

        //用户信息正确
        userInfo.password = bcrypt.hashSync(userInfo.password, 10);
        //插入用户数据
        let sql = "INSERT INTO en_users SET ?"
        db.query(sql, {username: userInfo.username, password: userInfo.password}, (err, results) => {
            if (err) {
                return res.cc(err)
            }
            if (results.affectedRows !== 1) {
                return res.cc("用户注册失败")
            }
            return res.cc("恭喜您,注册成功", 0)
        })

    })

}
//导出并定义用户登录函数
exports.login = (req, res) => {
    //接受客服端发送的数据
    let userInfo = req.body;
    //查询用户是否存在
    let sql = "SELECT * FROM en_users WHERE username = ?"

    db.query(sql, userInfo.username, (err, results) => {
        if (err) {
            return res.cc(err)
        }
        //判断用户是否存在
        if (results.length === 0) {
            return res.cc("登录失败,用户名错误");
        }

        //判断密码是否正确
        let password = bcrypt.compareSync(userInfo.password, results[0].password);
        if (!password) {
            return res.cc("登录失败,密码错误")
        }
        //需要去掉用户的敏感信息，密码、头像等数据
        let user = {...results[0], password: "", user_pic: ""}
        //生成token字符串，响应给客服端
        let token = jwt.sign(user, jwtSecretKey, {expiresIn: expiresIn});

        return res.send({
            status: 0,
            message: "登录成功",
            token: "Bearer " + token
        })
    })


}
